#pragma once

#include "color.h"
#include "vec3.h"

namespace TG
{
	struct Vertex
	{
	public:
		vec3 vertex;
		Rgba color;
		vec3 normal;
		vec3 tangent;
		vec3 uv0;
		vec3 uv1;

		Vertex() {}
		Vertex(vec3 vertex, Rgba color) :vertex(vertex), color(color) {}
		Vertex(vec3 vertex, Rgba color, vec3 uv0) :vertex(vertex), color(color), uv0(uv0) {}
		Vertex(vec3 vertex, Rgba color, vec3 normal, vec3 uv0) :vertex(vertex), color(color), normal(normal), uv0(uv0) {}
	};

	class Edge
	{
	public:
		Vertex p0;
		Vertex p1;

		Edge(const Vertex &p0, const Vertex &p1)
		{
			if (p0.vertex.y < p1.vertex.y)
			{
				this->p0 = p0;
				this->p1 = p1;
			}
			else
			{
				this->p0 = p1;
				this->p1 = p0;
			}
		}

		float offsetY() const
		{
			return p1.vertex.y - p0.vertex.y;
		}

		float offsetX() const
		{
			return p1.vertex.x - p0.vertex.x;
		}

		//Edge(float x0, float y0, float x1, float y1, Rgba c0, Rgba c1)
		//{
		//	if (y0 < y1)
		//	{
		//		this->p0.vertex.x = x0;
		//		this->p0.vertex.y = y0;
		//
		//		this->c0 = c0;
		//
		//		this->x1 = x1;
		//		this->y1 = y1;
		//
		//		this->c1 = c1;
		//	}
		//	else
		//	{
		//		this->x0 = x1;
		//		this->y0 = y1;
		//
		//		this->c0 = c1;
		//
		//		this->x1 = x0;
		//		this->y1 = y0;
		//
		//		this->c1 = c0;
		//	}
		//}
	};
}